package com.collections;

import com.bean.User;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import org.junit.Test;

import java.util.Collection;
import java.util.Map;

public class MultimapDemo {

    /**
     * Multimap 提供了一个方便地把一个键对应到多个值的数据结构
     *  ”键-单个值映射”的集合(例如：a -> 1 a -> 2 a ->4 b -> 3 c -> 5)
     *  用于替代 Map<K, List<V>>或Map<K, Set<V>>这种结构
     *  提供多种实现 ArrayListMultimap	   HashMultimap  等
     */
    @Test
    public void multiMapTest(){
        Multimap<String, User> multimap = ArrayListMultimap.create();
        for (int i = 1; i <= 5; i++) {
            multimap.put("one", User.of().setAge(23).setName("用户"+i).setLevel(i));
        }
        for (int i = 1; i <= 5; i++) {
            multimap.put("two", User.of().setAge(20).setName("用户"+i).setLevel(i));
        }
        multimap.containsKey("one"); //判断是否包含有key
        multimap.size(); //所有元素个数
        //转换为map数据结构
        Map<String, Collection<User>> map = multimap.asMap();
        multimap.remove("key", User.of());//移除key对应下指定的value
        multimap.keys();//获取所有的key
        multimap.values(); //获取所有的value
        multimap.removeAll("one");//移除key对应的所有元素
        multimap.replaceValues("two", Lists.newArrayList(User.of()));// 替换key对应的元素
    }
}
